home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2000 January / Macworld (2000-01).dmg / Mac OS 9 Updaters / Utilities / Reaper 131 / Source Code / Reaper Utils.c < prev    next >
Text File  |  1999-11-10  |  5KB  |  211 lines

  1. // AKUA Protos
  2. /////////////////////////////
  3. //
  4. //    Includes Beg
  5. //
  6. #define        STANDALONER            TRUE
  7.  
  8. #include    "yLibCfg.h"
  9.  
  10. #include    "Reaper.h"
  11.  
  12. #ifndef        _yFixedMath
  13. #include    "yFixedMath.h"
  14. #endif    //    _yFixedMath
  15.  
  16. #ifndef        _yStringH
  17. #include    "yString.h"
  18. #endif    //    _yStringH
  19.  
  20.  
  21. #include    <Devices.h>
  22. //
  23. //    Includes End
  24. //
  25. /////////////////////////////
  26.  
  27. /*****************************************************************************************************************\
  28.  
  29.     File:        cdev.c
  30.  
  31.     Version:    1.10
  32.  
  33.     Contains:    'OAGT' Object Agent for OdoClock 
  34.                     
  35.     Written by:    Gregory Mathias Lemperle-Kerr
  36.  
  37.     Copyright:    ©1992-1996 worldwide by AKUA Interactive Media, Inc. All rights reserved
  38.  
  39.     Usage:        This file contains the code for an 'OAGT' that dynamically connects to
  40.                  the 'cdev' to handle the window object. Messages from the Finder are translated
  41.                  to standard window agent messages and passed on to the OAGT who may pass them
  42.                  on to panel object agents.
  43.  
  44.     To Do:
  45.  
  46.     History:
  47.     110    GOD    19.03.1997    Added speech
  48.  
  49.     100    GOD    15.05.1996    Start
  50.  
  51. \*****************************************************************************************************************/
  52.  
  53.  
  54. // AKUA Statics Beg
  55. static oaVal oaFiVolumeTrash(oaObj fcObj);
  56. static bool fiVolumeDesktopTest(VolRef suspect, ident creator, FileRef * dtdbRef);
  57. #if            ISAPPC
  58. static pascal OSErr PBXGetVolInfoSyncPre85(XVolumeParamPtr paramBlock);
  59. #endif    //    ISAPPC
  60. // AKUA Statics End
  61.  
  62.  
  63.  
  64.  
  65. appItem rpFindApp(BADAPP prefH, ident creator, StringPtr name, bool onlyROM, int * idx, bool * matchedName)
  66.  {
  67.     bool        nmat;
  68.  
  69.     badApp        pref    = *prefH;
  70.     int            cnt        = pref->cnt;
  71.     appItem        item    = pref->item;
  72.     StringPtr    inam    = mcSlutString(mcPrefSlutX(item, cnt));
  73.     appItem        found    = NULL;
  74.     int            fidx    = -1;
  75.  
  76.  
  77.     for(int appIdx = 0; appIdx < cnt; appIdx ++, item ++, inam += 1 + *inam)
  78.         if ( (item->creator == creator) && (onlyROM || !mcObjTst(item, bbaOnlyIfROM))
  79.             && ( (nmat = (mcObjTst(item, bbaByName) && stEqualP(name, inam))) || !found) )
  80.          {
  81.             found    = item;
  82.             fidx    = appIdx;
  83.  
  84.             if (matchedName)
  85.                 *matchedName = nmat;
  86.          }
  87.  
  88.     if (idx)
  89.         *idx = fidx;
  90.  
  91.     return    found;
  92.  }
  93.  
  94.  
  95.  
  96. appItem rpFindApp(BADAPP prefH, RsrcFileRef ref, ident creator)
  97.  {
  98.     FileSpec    appSpec;
  99.  
  100.     if (!fiRefToSpec(ref, &appSpec))
  101.      {
  102.         bool rom =  mcFlagTst(GetResFileAttrs(ref), mapReadOnly) || !fiVolumeIsWritable(appSpec.vRefNum);
  103.  
  104.         // rpFindApp must Check for ROM! 
  105.         return rpFindApp(prefH, creator ? creator : fiOrderGet(&appSpec), appSpec.name, rom, NULL, NULL);
  106.      }
  107.  
  108.     return    NULL;
  109.  }
  110.  
  111.  
  112.  
  113. appItem rpFindApp(BADAPP prefH, fileSpec appSpec, ident creator)
  114.  {
  115.     bool rom = !fiVolumeIsWritable(appSpec->vRefNum);
  116.  
  117.     // rpFindApp must Check for ROM! 
  118.     return rpFindApp(prefH, creator ? creator : fiOrderGet(appSpec), appSpec->name, rom, NULL, NULL);
  119.  }
  120.  
  121.  
  122.  
  123. appItem rpFindApp(BADAPP prefH, ProcessNum pn)
  124.  {
  125.     if (*osCurApName <= 31)
  126.      {
  127.         ProcessSN            appSN;
  128.         ProcessInfoRec        appInfo;
  129.         FileSpec            appSpec;
  130.  
  131.         // Check if we are allowed to…
  132.         appInfo.processInfoLength = sizeof(appInfo);
  133.         appInfo.processName = NULL;
  134.         appInfo.processAppSpec = &appSpec;
  135.         appSN.highLongOfPSN = 0;
  136.         appSN.lowLongOfPSN = kCurrentProcess;
  137.  
  138.         GetProcessInformation(&appSN, &appInfo);
  139.  
  140.         return rpFindApp(prefH, &appSpec, appInfo.processSignature);
  141.      }
  142.  
  143.     return    NULL;
  144.  }
  145.  
  146.  
  147.  
  148.  
  149. short rpFindHeap(BADAPP prefH, fileSpec app, bool onlyROM)
  150.  {
  151.     // rpFindApp must Check for ROM! 
  152.     if (appItem item = rpFindApp(prefH, fiOrderGet(app), app->name, onlyROM, NULL, NULL))
  153.         return    item->reap;
  154.  
  155.     return    onlyROM ? (*prefH)->reapROM : (*prefH)->reapRWM;
  156.  }
  157.  
  158.  
  159.  
  160.  
  161. long rpFindHeapSize(BADAPP prefH, FileRef ref, long heap)
  162.  {
  163.     FileSpec        appSpec;
  164.  
  165.     fiRefToSpec(ref, &appSpec);
  166.  
  167.     if (short adjust = rpFindHeap(prefH, &appSpec,
  168.         mcFlagTst(GetResFileAttrs(ref), mapReadOnly) || !fiVolumeIsWritable(appSpec.vRefNum)))    // Seems to be shifted in MacOS 8.51?!?
  169.      {
  170.     //    DebugStr(appSpec.name);
  171.         heap += rpCalcHeapAdd(heap, adjust);
  172.      }
  173.  
  174.     return    heap;
  175.  }
  176.  
  177.  
  178.  
  179. long rpCalcHeapAdd(long heap, short adjust)
  180.  {
  181.     long    more;
  182.  
  183.     // Go to KB
  184.     heap >>= 10;
  185.  
  186.     if (adjust < 0)    // %age?
  187.      {
  188.         Fixed    heapK = mcWordToFixed(heap);
  189.         Fixed    ratio = mcFixToFixedWord(FixRatio(-adjust, 100));
  190.         more = FixMul(ratio, heapK);    // Now in 4*64K
  191.         more >>= 8;                        // Div 256
  192.      }
  193.     else
  194.         more = ((lwrd)adjust) << 4 ; // 16K to K
  195.  
  196.     more <<= 10;    // Go to bytes
  197.     more &= ~0xFFL;    // Clear out low 256
  198.     more += 11;        // To show that we are adjusted
  199.  
  200.     return    more;
  201.  }
  202.  
  203.  
  204.  
  205. #define        Y_BAREBONES        TRUE    // No Agencies…
  206.  
  207. #include    "fiClass.c"
  208. #include    "fiFlag.c"
  209. #include    "fiRefToSpec.c"
  210. #include    "fiVolume.c"
  211.